Käesolevas õppematerjalis on esitatud andmestiku puhastamise, ettevalmistamise ja kirjeldava analüüsu läbiviimise skeem andmestiku flights.csv näitel. Antud materjalis lahendatud ülesanded vastavad Seminaritöö 1 ülesannetele.

Andmete eeltöötlus

Andmete eeltöötluse etapil toimub andmete edasiseks analüüsiks ettevalmistamine: andmete lugemine, tunnuste tüüpide kontrollimine, puhastamine (vigaste väärtuste kontroll ja eemaldamine, duplikaatide eemaldamine, puuduvate väärtuste kontroll ja asendamine või eemaldamine, mittesobivate tunnuste kustutamine) ja ka tunnuste teisendamine ning uute tunnuste moodustamine.

Andmete lugemine

flight failist Loeme andmeid R-i failist flights.csv, andmestik flights.csv üle 40nda rea. Üle rea lugemiseks kasutame seq() funktsiooni.

flight <- read.csv("flights.csv", header=TRUE, stringsAsFactors = FALSE)
flight <- flight[seq(1, nrow(flight), by = 40), ]

Ülevaade andmestikust

Et saada andmestikust ülevaadet väljastame andmestiku tabelina. Selleks kasutame funktsiooni datatable() paketist “DT” ja library(“DT”).

library(DT)
datatable(flight, options=list(scrollx=1, pageLenght=10, searching=FALSE, scroller=TRUE, scrolly=200))

Ülevaade andmestiku struktuurist

Ülevaade funktsiooni str() abil

Kasutame funktsiooni str() andmestiku struktuuri ülevaatamiseks

str(flight)
## 'data.frame':    145477 obs. of  31 variables:
##  $ YEAR               : int  2015 2015 2015 2015 2015 2015 2015 2015 2015 2015 ...
##  $ MONTH              : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ DAY                : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ DAY_OF_WEEK        : int  4 4 4 4 4 4 4 4 4 4 ...
##  $ AIRLINE            : chr  "AS" "NK" "HA" "AA" ...
##  $ FLIGHT_NUMBER      : int  98 451 103 2299 115 410 272 1600 3540 7392 ...
##  $ TAIL_NUMBER        : chr  "N407AS" "N633NK" "N477HA" "N3LLAA" ...
##  $ ORIGIN_AIRPORT     : chr  "ANC" "PBG" "HNL" "JFK" ...
##  $ DESTINATION_AIRPORT: chr  "SEA" "FLL" "LIH" "MIA" ...
##  $ SCHEDULED_DEPARTURE: int  5 155 523 545 555 600 600 600 600 600 ...
##  $ DEPARTURE_TIME     : int  2354 139 513 640 550 553 559 552 555 558 ...
##  $ DEPARTURE_DELAY    : int  -11 -16 -10 55 -5 -7 -1 -8 -5 -2 ...
##  $ TAXI_OUT           : int  21 10 7 17 27 14 16 17 18 15 ...
##  $ WHEELS_OFF         : int  15 149 520 657 617 607 615 609 613 613 ...
##  $ SCHEDULED_TIME     : int  205 208 37 185 83 170 161 107 103 87 ...
##  $ ELAPSED_TIME       : int  194 191 35 199 75 173 164 92 96 68 ...
##  $ AIR_TIME           : int  169 174 21 152 43 155 143 72 73 47 ...
##  $ DISTANCE           : int  1448 1334 102 1089 209 1009 1076 399 530 306 ...
##  $ WHEELS_ON          : int  404 443 541 929 700 742 838 721 826 700 ...
##  $ TAXI_IN            : int  4 7 7 30 5 4 5 3 5 6 ...
##  $ SCHEDULED_ARRIVAL  : int  430 523 600 850 718 750 841 747 843 727 ...
##  $ ARRIVAL_TIME       : int  408 450 548 959 705 746 843 724 831 706 ...
##  $ ARRIVAL_DELAY      : int  -22 -33 -12 69 -13 -4 2 -23 -12 -21 ...
##  $ DIVERTED           : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ CANCELLED          : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ CANCELLATION_REASON: chr  "" "" "" "" ...
##  $ AIR_SYSTEM_DELAY   : int  NA NA NA 14 NA NA NA NA NA NA ...
##  $ SECURITY_DELAY     : int  NA NA NA 0 NA NA NA NA NA NA ...
##  $ AIRLINE_DELAY      : int  NA NA NA 55 NA NA NA NA NA NA ...
##  $ LATE_AIRCRAFT_DELAY: int  NA NA NA 0 NA NA NA NA NA NA ...
##  $ WEATHER_DELAY      : int  NA NA NA 0 NA NA NA NA NA NA ...

Funktsiooni str() rakendamise tulemusel saime teada, et andmestikus on 145477 objekti ja 31 muutuja.

Ülevaade funktsiooni skim() abil

Teeme andmestiust detailsema ülevaate paketi skimr funktsiooni selle abil:

library(skimr)
skim(flight)
Data summary
Name flight
Number of rows 145477
Number of columns 31
_______________________
Column type frequency:
character 5
numeric 26
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
AIRLINE 0 1 2 2 0 14 0
TAIL_NUMBER 0 1 0 6 370 4674 0
ORIGIN_AIRPORT 0 1 3 5 0 599 0
DESTINATION_AIRPORT 0 1 3 5 0 601 0
CANCELLATION_REASON 0 1 0 1 143226 5 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
YEAR 0 1.00 2015.00 0.00 2015 2015 2015 2015 2015 ▁▁▇▁▁
MONTH 0 1.00 6.52 3.41 1 4 7 9 12 ▇▆▆▆▇
DAY 0 1.00 15.70 8.78 1 8 16 23 31 ▇▇▇▇▆
DAY_OF_WEEK 0 1.00 3.93 1.99 1 2 4 6 7 ▇▅▅▅▇
FLIGHT_NUMBER 0 1.00 2172.99 1756.04 1 734 1688 3226 7438 ▇▅▂▂▁
SCHEDULED_DEPARTURE 0 1.00 1329.42 483.83 3 916 1325 1730 2359 ▁▇▇▇▅
DEPARTURE_TIME 2151 0.99 1335.66 496.12 1 922 1330 1739 2400 ▁▇▇▇▅
DEPARTURE_DELAY 2151 0.99 9.36 37.39 -40 -5 -2 7 1988 ▇▁▁▁▁
TAXI_OUT 2226 0.98 16.06 8.89 1 11 14 19 176 ▇▁▁▁▁
WHEELS_OFF 2226 0.98 1357.34 497.79 1 936 1343 1753 2400 ▁▇▇▇▅
SCHEDULED_TIME 1 1.00 141.72 75.00 18 85 123 174 683 ▇▃▁▁▁
ELAPSED_TIME 2621 0.98 136.99 74.02 15 82 118 168 733 ▇▃▁▁▁
AIR_TIME 2621 0.98 113.50 72.05 8 60 94 144 687 ▇▂▁▁▁
DISTANCE 0 1.00 822.54 606.00 31 373 649 1065 4983 ▇▂▁▁▁
WHEELS_ON 2325 0.98 1472.68 522.10 1 1055 1509 1913 2400 ▁▅▇▇▇
TAXI_IN 2325 0.98 7.44 5.66 1 4 6 9 197 ▇▁▁▁▁
SCHEDULED_ARRIVAL 0 1.00 1494.65 507.29 1 1110 1520 1920 2359 ▁▅▇▇▇
ARRIVAL_TIME 2325 0.98 1477.11 526.57 1 1059 1512 1917 2400 ▁▅▇▇▇
ARRIVAL_DELAY 2621 0.98 4.37 39.59 -79 -13 -5 8 1971 ▇▁▁▁▁
DIVERTED 0 1.00 0.00 0.05 0 0 0 0 1 ▇▁▁▁▁
CANCELLED 0 1.00 0.02 0.12 0 0 0 0 1 ▇▁▁▁▁
AIR_SYSTEM_DELAY 119003 0.18 13.42 28.34 0 0 2 17 1134 ▇▁▁▁▁
SECURITY_DELAY 119003 0.18 0.08 2.13 0 0 0 0 144 ▇▁▁▁▁
AIRLINE_DELAY 119003 0.18 19.06 49.44 0 0 2 19 1971 ▇▁▁▁▁
LATE_AIRCRAFT_DELAY 119003 0.18 23.48 43.52 0 0 3 29 884 ▇▁▁▁▁
WEATHER_DELAY 119003 0.18 2.89 20.33 0 0 0 0 771 ▇▁▁▁▁

Peale andmestiku objektide ja tunnuste arvust funktsioon skim() annab teada, ett andmestikus on 5 sümbolitüüpi ja 26 arvulist tunnust. Näeme teise tabeli põhjal, et andmestikus on puuduvate väärtustega 0 väärtusi ning tühjasi lahtreid on 370 TAIL_NUMBER ja 143226 CANCELLATION_REASON. Kolmandas tabelis näeme, et tunnustes DEPARTURE_TIME, DEPARTURE_DELAY, TAXI_OUT ja WHEELS_OFF on 2151-2226 puuduvaid väärtusi.

Andmestiku puhastamine

Duplikaatide kontroll

kontrollime duplikaatide olemasolu duplicated() abil.

sum(duplicated(flight))
## [1] 0

Näeme, et selles andmestikkus duplikaadid puuduvad.

Puuduvate väärtuste kontroll

Puuduvate väärtuste olemsolu kontrollimiseks kasutatakse funktsiooni is.na(). Leiame puuduvate väärtuste koguarvu andmestikus. Puuduvate väärtuste koguarv on r sum(is.na(air))

sum(!complete.cases(flight))
## [1] 119003

Puuduvate väärtuste koguarv on 618608. Puuduvate väärtustega objektide arvu leidmiseks kasutatakse funktsiooni complete.cases(). Leiame puuduvate väärtustega objektide arvu andmestikus.

sum(!complete.cases(flight))
## [1] 119003

Antud andmestikus on puuduvate väärtustega ehk NA väärtustega objekte ja neid on 119003.

Leiame mitu puuduvat väärtust igal tunnusel on funktsiooni apply() abil.

apply(is.na(flight), 2, sum)
##                YEAR               MONTH                 DAY         DAY_OF_WEEK 
##                   0                   0                   0                   0 
##             AIRLINE       FLIGHT_NUMBER         TAIL_NUMBER      ORIGIN_AIRPORT 
##                   0                   0                   0                   0 
## DESTINATION_AIRPORT SCHEDULED_DEPARTURE      DEPARTURE_TIME     DEPARTURE_DELAY 
##                   0                   0                2151                2151 
##            TAXI_OUT          WHEELS_OFF      SCHEDULED_TIME        ELAPSED_TIME 
##                2226                2226                   1                2621 
##            AIR_TIME            DISTANCE           WHEELS_ON             TAXI_IN 
##                2621                   0                2325                2325 
##   SCHEDULED_ARRIVAL        ARRIVAL_TIME       ARRIVAL_DELAY            DIVERTED 
##                   0                2325                2621                   0 
##           CANCELLED CANCELLATION_REASON    AIR_SYSTEM_DELAY      SECURITY_DELAY 
##                   0                   0              119003              119003 
##       AIRLINE_DELAY LATE_AIRCRAFT_DELAY       WEATHER_DELAY 
##              119003              119003              119003

Puuduvad väärtused on seotud tunnustega: DEPARTURE_TIME ja DEPARTURE_DELAY: 2151, TAXI_OUT ja WHEELS_OFF: 2226, SCHEDULED_TIME: 1, ELAPSED_TIME ja AIR_TIME: 2621, WHEELS_ON ja TAXI_IN: 2325, AIR_SYSTEM_DELAY, SECURITY_DELAY, AIRLINE_DELAY, LATE_AIRCRAFT_DELAY ja WEATHER_DELAY: 119003

Eemaldame puuduvate väärtustega objekte

Puuduvate väärtustega objektide eemaldamine: Eemaldamiseks kasutame ‘na.omit()’ funktsiooni.

flight <- na.omit(flight)

Pärast puuduvate väärtustega objektide eemaldamist kontrollime objektide arvu uuesti.

sum(complete.cases(flight))
## [1] 26474

Andmestikus on nüüd alles 26474 objekti.

Kontrollime, et andmetüübid on R-i poolt õigesti loetud ja mittearvuliste tunnuste tüübiks on factor

Faktor tunnuste moodustamine

flight <- as.data.frame(unclass(flight), stringAsFactors = TRUE)

Ülevaate loomine

skim(flight)
Data summary
Name flight
Number of rows 26474
Number of columns 31
_______________________
Column type frequency:
character 5
numeric 26
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
AIRLINE 0 1 2 2 0 14 0
TAIL_NUMBER 0 1 5 6 0 4417 0
ORIGIN_AIRPORT 0 1 3 5 0 485 0
DESTINATION_AIRPORT 0 1 3 5 0 479 0
CANCELLATION_REASON 0 1 0 0 26474 1 0

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
YEAR 0 1 2015.00 0.00 2015 2015 2015 2015 2015 ▁▁▇▁▁
MONTH 0 1 6.23 3.41 1 3 6 9 12 ▇▅▆▅▆
DAY 0 1 15.52 8.82 1 8 16 23 31 ▇▆▇▆▆
DAY_OF_WEEK 0 1 3.87 1.98 1 2 4 5 7 ▇▃▅▅▆
FLIGHT_NUMBER 0 1 2196.12 1791.96 1 727 1666 3300 7438 ▇▅▂▂▁
SCHEDULED_DEPARTURE 0 1 1465.91 455.24 3 1115 1520 1832 2359 ▁▃▆▇▅
DEPARTURE_TIME 0 1 1527.14 485.86 1 1156 1606 1923 2400 ▁▃▆▇▆
DEPARTURE_DELAY 0 1 54.94 68.35 -21 17 37 70 1988 ▇▁▁▁▁
TAXI_OUT 0 1 20.69 14.81 1 12 16 24 176 ▇▁▁▁▁
WHEELS_OFF 0 1 1549.17 492.87 1 1209 1623 1939 2400 ▁▃▆▇▆
SCHEDULED_TIME 0 1 143.47 75.24 20 86 125 175 680 ▇▃▁▁▁
ELAPSED_TIME 0 1 147.46 77.41 17 90 130 182 733 ▇▃▁▁▁
AIR_TIME 0 1 117.98 74.26 9 63 100 150 687 ▇▂▁▁▁
DISTANCE 0 1 836.80 607.34 31 386 677 1076 4983 ▇▂▁▁▁
WHEELS_ON 0 1 1584.26 596.85 1 1245 1719 2042 2400 ▂▂▅▇▇
TAXI_IN 0 1 8.79 9.06 1 4 6 9 197 ▇▁▁▁▁
SCHEDULED_ARRIVAL 0 1 1622.53 504.31 1 1300 1715 2030 2359 ▁▂▅▇▇
ARRIVAL_TIME 0 1 1578.15 610.76 1 1241 1720 2046 2400 ▂▂▅▆▇
ARRIVAL_DELAY 0 1 58.93 65.50 15 22 37 70 1971 ▇▁▁▁▁
DIVERTED 0 1 0.00 0.00 0 0 0 0 0 ▁▁▇▁▁
CANCELLED 0 1 0.00 0.00 0 0 0 0 0 ▁▁▇▁▁
AIR_SYSTEM_DELAY 0 1 13.42 28.34 0 0 2 17 1134 ▇▁▁▁▁
SECURITY_DELAY 0 1 0.08 2.13 0 0 0 0 144 ▇▁▁▁▁
AIRLINE_DELAY 0 1 19.06 49.44 0 0 2 19 1971 ▇▁▁▁▁
LATE_AIRCRAFT_DELAY 0 1 23.48 43.52 0 0 3 29 884 ▇▁▁▁▁
WEATHER_DELAY 0 1 2.89 20.33 0 0 0 0 771 ▇▁▁▁▁

Andmestikus on 5 faktor tunnust ja 26 arvulist tunnust

Arvulise tunnuste konstrueerimine ja korrektselt vormistamine suhteliste sageduste histogramm ja karpdiagramm

h <- hist(flight$DEPARTURE_DELAY, col = "skyblue", main="Tunnuste DEPARTURE_DELAY sageduste histogramm", xlab="Sissetulek viimase aasta jooksul", ylab="sageduse arv",cex.main=0.8, cex.lab=0.8)

par(mfrow=c(1,2))
h$counts<-h$counts/sum(h$counts)*100

plot(h,col = "skyblue",main = "Tunnuse DEPARTURE_DELAY \n suhteliste sageduste histogramm", xlab="palgast sissetulek aasta jooksul", ylab = "suht.sagedus,%",cex.main=0.8, las=2, cex.lab=0.8)

b <- boxplot(flight$DEPARTURE_DELAY, col = "skyblue", horizontal = 1, main="Tunnuse DEPARTURE_DELAY karpdiagramm", xlab="tubade arv", cex.main=1, range = 15, cex.lab=1 )